はじめてのRmakeスクリプト
第05回 通常変数をマスターしよう
![](https://d2nlrppnj7be8d.cloudfront.net/materials/0012/8682/C01_02_01.png)
こんにちは 簸川 葵(ひかわ あおい)と申します
![](https://d2nlrppnj7be8d.cloudfront.net/materials/0012/8697/C02_02_01.png)
こんにちは 剣 芽優(つるぎ めゆ)です
![](https://d2nlrppnj7be8d.cloudfront.net/materials/0012/8682/C01_02_01.png)
この連載ではスクリプトの基礎を、じっくりとお話していきます
![](https://d2nlrppnj7be8d.cloudfront.net/materials/0012/8706/C02_02_04.png)
分からないところがあったら、過去の記事を確認よ
05-01 変数の種類
前回では配列変数についてお話しました
![](https://d2nlrppnj7be8d.cloudfront.net/materials/0012/8682/C01_02_01.png)
今回は、『変数の種類』についてお話します
![](https://d2nlrppnj7be8d.cloudfront.net/materials/0012/8715/C02_02_07.png)
変数にも種類があるの?
![](https://d2nlrppnj7be8d.cloudfront.net/materials/0012/8694/C01_02_05.png)
これまでに使用してきた変数は『ローカル変数』といいます
![](https://d2nlrppnj7be8d.cloudfront.net/materials/0012/8688/C01_02_03.png)
『ローカル変数』はシンプルで扱いやすい変数なのですが、
RPG系では各イベント、ノベルでは各シーンが終了すると
ローカル変数とその内容は消えてしまうという難点があります
![](https://d2nlrppnj7be8d.cloudfront.net/materials/0012/8715/C02_02_07.png)
それじゃあ、あるイベントでポイントをもらって、
![](https://d2nlrppnj7be8d.cloudfront.net/materials/0012/8715/C02_02_07.png)
別のイベントでポイントをアイテムと交換してもらう
![](https://d2nlrppnj7be8d.cloudfront.net/materials/0012/8703/C02_02_03.png)
っていうことはできないのね・・・
![](https://d2nlrppnj7be8d.cloudfront.net/materials/0012/8694/C01_02_05.png)
そこで『通常変数』というものを使います
『通常変数』はRPG系の各イベント、ノベルの各シーンが終了しても
引き続き、値を保持しておくことができます
![](https://d2nlrppnj7be8d.cloudfront.net/materials/0012/8682/C01_02_01.png)
Rmakeでは
setVariable関数、
getVariable関数を使うことで、『通常変数』を実装できます
#通常変数「e」に、数値「7」を入れる
setVariable("e", 7)
#ローカル変数「x」に、通常変数「e」の中身を入れる
x = getVariable("e")
#通常変数「e」に、通常変数「e」の中身と数値「1」を足した結果を上書きする
setVariable("e", getVariable("e") + 1)
#通常変数「e」の中身を表示する
speak(getVariable("e"))
#通常変数「v」に、文字列「鉄の剣」を入れる
setVariable("v", "鉄の剣")
#通常変数「v」の中身を表示する
speak(getVariable("v"))
![](https://d2nlrppnj7be8d.cloudfront.net/materials/0012/8688/C01_02_03.png)
関数を使っているため、ローカル変数と見た目は異なりますが
![](https://d2nlrppnj7be8d.cloudfront.net/materials/0012/8688/C01_02_03.png)
動きとしては同じものになります
setVariable関数は、変数名の文字列と入れたい値を関数に渡していて、
getVariable関数は、変数名の文字列を関数に渡しているのね
変数名の指定が文字列なので、「"」で囲む必要があるところに気をつけてください
![](https://d2nlrppnj7be8d.cloudfront.net/materials/0012/8712/C02_02_06.png)
setVariable関数の中に、getVariable関数が入っていたり、
![](https://d2nlrppnj7be8d.cloudfront.net/materials/0012/8712/C02_02_06.png)
speak関数の中に、getVariable関数が入っているところがあるわ
![](https://d2nlrppnj7be8d.cloudfront.net/materials/0012/8688/C01_02_03.png)
関数の中に関数がある場合、
中の関数が先に実行されます
![](https://d2nlrppnj7be8d.cloudfront.net/materials/0012/8688/C01_02_03.png)
ここでは、getVariable関数で通常変数の中身が取り出された後、
![](https://d2nlrppnj7be8d.cloudfront.net/materials/0012/8688/C01_02_03.png)
その値がsetVariable関数によって通常変数に入れられたり、
![](https://d2nlrppnj7be8d.cloudfront.net/materials/0012/8688/C01_02_03.png)
その値がspeak関数によって表示される、という流れになります
![](https://d2nlrppnj7be8d.cloudfront.net/materials/0012/8697/C02_02_01.png)
戻り値をそのまま次の関数に渡しているわけね
05-02 通常変数とフラグ
![](https://d2nlrppnj7be8d.cloudfront.net/materials/0012/8688/C01_02_03.png)
フラグであるブーリアンを通常変数で使うときは
![](https://d2nlrppnj7be8d.cloudfront.net/materials/0012/8688/C01_02_03.png)
setVariable関数やgetVariable関数ではなく、
setFlag関数と
getFlag関数を使います
![](https://d2nlrppnj7be8d.cloudfront.net/materials/0012/8703/C02_02_03.png)
関数がいっぱい増えてきて、ちょっとややこしいかも・・・
![](https://d2nlrppnj7be8d.cloudfront.net/materials/0012/8694/C01_02_05.png)
大丈夫 使い方はsetVariable関数やgetVariable関数と同じです
#通常変数「f」に、ブーリアン「true」を入れる
setFlag("f", true)
#通常変数「f」の中身を表示する
speak(getFlag("f"))
#通常変数「f」の内容を元に分岐する
if getFlag("f")
#通常変数「f」が「true」の場合
speak("条件達成")
end
![](https://d2nlrppnj7be8d.cloudfront.net/materials/0012/8697/C02_02_01.png)
本当に使い方はそのままで、関数名がsetFlagやgetFlagに変わるのね
![](https://d2nlrppnj7be8d.cloudfront.net/materials/0012/8703/C02_02_03.png)
でも、ブーリアンだとsetVariable関数やgetVariable関数は使えないの?
![](https://d2nlrppnj7be8d.cloudfront.net/materials/0012/8688/C01_02_03.png)
問題なく使えますが、何も入っていない時の内容が異なります
![](https://d2nlrppnj7be8d.cloudfront.net/materials/0012/8715/C02_02_07.png)
何も入っていないとき・・・?
![](https://d2nlrppnj7be8d.cloudfront.net/materials/0012/8688/C01_02_03.png)
setVariable関数を使う前に、getVariable関数を使った場合、
![](https://d2nlrppnj7be8d.cloudfront.net/materials/0012/8688/C01_02_03.png)
それと、setFlag関数を使う前に、getFlag関数を使った場合です
#setVariableされていない、通常変数の中身を表示する
speak(getVariable("e"))
#setFlagされていない、通常変数の中身を表示する
speak(getFlag("f"))
![](https://d2nlrppnj7be8d.cloudfront.net/materials/0012/8712/C02_02_06.png)
ひとつめは「NULL」って表示されたけど、ふたつめは「false」って表示されたわ
![](https://d2nlrppnj7be8d.cloudfront.net/materials/0012/8694/C01_02_05.png)
if文などの条件として値が必要なとき、
![](https://d2nlrppnj7be8d.cloudfront.net/materials/0012/8682/C01_02_01.png)
getFlag関数ならそれより前にsetFlag関数を使っていなくても
![](https://d2nlrppnj7be8d.cloudfront.net/materials/0012/8682/C01_02_01.png)
すぐに使うことができるわけです
![](https://d2nlrppnj7be8d.cloudfront.net/materials/0012/8697/C02_02_01.png)
RPG系のイベントで使うことがある「有効条件」にもすぐに使えるわけね
05-03 通常変数と配列
![](https://d2nlrppnj7be8d.cloudfront.net/materials/0012/8682/C01_02_01.png)
通常変数も、配列を使うことができます
![](https://d2nlrppnj7be8d.cloudfront.net/materials/0012/8715/C02_02_07.png)
配列というと、createArray関数だったっけ
![](https://d2nlrppnj7be8d.cloudfront.net/materials/0012/8694/C01_02_05.png)
そうですね 実際にスクリプトをみてみましょう
#「e」という名前の通常変数に、配列を用意する
setVariable("e", createArray())
#「e」という名前の配列通常変数の0番目に、数値「10」を入れる
getVariable("e")[0] = 10
#「e」という名前の配列通常変数の1番目に、数値「11」を入れる
getVariable("e")[1] = 11
#「e」という名前の配列通常変数の2番目に、数値「12」を入れる
getVariable("e")[2] = 12
#「e」という名前の配列通常変数の2番目を表示する
speak(getVariable("e")[2])
![](https://d2nlrppnj7be8d.cloudfront.net/materials/0012/8715/C02_02_07.png)
変数に配列を用意したときのように、
![](https://d2nlrppnj7be8d.cloudfront.net/materials/0012/8715/C02_02_07.png)
setVariable関数にcreateArray関数が入る形になるのね
![](https://d2nlrppnj7be8d.cloudfront.net/materials/0012/8682/C01_02_01.png)
配列の番号は通常変数の後に「[番号]」がつくようになります
![](https://d2nlrppnj7be8d.cloudfront.net/materials/0012/8712/C02_02_06.png)
配列通常変数は値を入れるときに、setVariable関数を使わないの?
![](https://d2nlrppnj7be8d.cloudfront.net/materials/0012/8691/C01_02_04.png)
良いところに気がつきましたね
![](https://d2nlrppnj7be8d.cloudfront.net/materials/0012/8688/C01_02_03.png)
createArray関数は配列のベースを用意する関数です
![](https://d2nlrppnj7be8d.cloudfront.net/materials/0012/8688/C01_02_03.png)
つまりこの場合、通常変数「e」には配列のベースが入っているわけです
![](https://d2nlrppnj7be8d.cloudfront.net/materials/0012/8688/C01_02_03.png)
そのベースをgetVariable関数で取得した後、配列の指定番号に値を入れるため
![](https://d2nlrppnj7be8d.cloudfront.net/materials/0012/8682/C01_02_01.png)
ローカル変数のような「=」を使う形になるのです
![](https://d2nlrppnj7be8d.cloudfront.net/materials/0012/8697/C02_02_01.png)
だから
配列通常変数の場合、getVariable関数と番号で値を入れる形になるのね
05-04 第05回 まとめ問題集
![](https://d2nlrppnj7be8d.cloudfront.net/materials/0012/8682/C01_02_01.png)
それでは、今回のまとめ問題です
![](https://d2nlrppnj7be8d.cloudfront.net/materials/0012/8700/C02_02_02.png)
よーっし がんばるよ
![](https://d2nlrppnj7be8d.cloudfront.net/materials/0012/8688/C01_02_03.png)
なお、回答は記載しておりません
![](https://d2nlrppnj7be8d.cloudfront.net/materials/0012/8682/C01_02_01.png)
スクリプトをコピーして、実際に動作させることでチェックしてください
問題01
次のスクリプトに実行結果が「銀の剣」と表示されるよう、1行を追加してください
#ここに追加する
speak(getVariable("v"))
問題02
次のスクリプトに実行結果が「2」と表示されるよう、1行を追加してください
setVariable("e", 0)
if getFlag("f")
setVariable("e", getVariable("e") + 1)
#ここに追加する
setVariable("e", getVariable("e") + 2)
end
speak(getVariable("e"))
問題03
次のスクリプトに通常変数「e」を使用して実行結果が「5」と表示されるよう、2行を追加してください
setVariable("e", createArray())
#ここに追加する
speak(x)
![](https://d2nlrppnj7be8d.cloudfront.net/materials/0012/8706/C02_02_04.png)
できた! これで別々のイベントでもばっちりね
![](https://d2nlrppnj7be8d.cloudfront.net/materials/0012/8688/C01_02_03.png)
なお、理解したかどうかの確認なので、
コメントに回答を書かないでください
<連載一覧>
第01回 変数と数値をマスターしよう
第02回 変数と文字列をマスターしよう
第03回 変数とフラグをマスターしよう
第04回 配列変数をマスターしよう
第05回 通常変数をマスターしよう
第06回 数値の応用をマスターしよう
第07回 時間の動作をマスターしよう
第08回 ユーザ定義関数をマスターしよう
第09回 スクリプト用語のまとめ
この記事についてご質問等がありましたら
こちらのブログ記事のコメントへご投稿、
よろしくお願いいたします。